/**
 *  Copyright (C) 2008-2013  Telosys project org. ( http://www.telosys.org/ )
 *
 *  Licensed under the GNU LESSER GENERAL PUBLIC LICENSE, Version 3.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *          http://www.gnu.org/licenses/lgpl.html
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.telosys.common.output.error;


/**
 * Error fired during the generation of the "data" section in the output.
 * 
 * 
 * @author Laurent Guerin
 * @since 1.0.5
 *
 */
public class DataOutputError extends OutputError
{
    private Object    _oDataInstance = null ;

    private String    _sElementName  = null ;
   
    /**
     * Constructor
     * @param oDataInstance
     * @param sElementName
     * @param exception
     */
    public DataOutputError(Object oDataInstance, String sElementName, Throwable exception )
    {
        super(exception);
        _oDataInstance = oDataInstance ;
        _sElementName = sElementName != null ? sElementName : "" ;
    }

    /**
     * Constructor
     * @param oDataInstance
     * @param sElementName
     * @param message
     */
    public DataOutputError(Object oDataInstance, String sElementName, String message)
    {
        super(message);
        _oDataInstance = oDataInstance ;
        _sElementName = sElementName != null ? sElementName : "" ;
    }
    
    /**
     * Returns the element name (never null)
     * @return
     */
    public String getElementName()
    {
        return _sElementName;
    }

    /**
     * Returns the data element instance 
     * @return
     */
    public Object getDataInstance()
    {
        return _oDataInstance;
    }

    /**
     * Returns the class of the data element instance 
     * @return
     */
    public Class<?> getDataClass()
    {
        return _oDataInstance != null ? _oDataInstance.getClass() : null ;
    }

    /**
     * Returns the class name of the data element instance 
     * @return
     */
    public String getDataClassName()
    {
        return _oDataInstance != null ? _oDataInstance.getClass().getName() : null ;
    }
}
